{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-mail-core",
      "artifactVersion": "10.10-HF20",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.mail.jsf",
          "org.nuxeo.ecm.platform.mail.types",
          "org.nuxeo.ecm.platform.mail.webui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail",
        "id": "grp:org.nuxeo.ecm.platform.mail",
        "name": "org.nuxeo.ecm.platform.mail",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n",
            "digest": "5c14b7245188fbe51fcebd6e4c6eff98",
            "encoding": "UTF-8",
            "length": 7955,
            "mimeType": "text/plain",
            "name": "README.md"
          },
          {
            "blobProviderId": "default",
            "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n\nTo test your setting you can use this class:\nA TestConnection class sample\n\n\tpublic class TestImapConnection {\n\n\t    public static void main(String args[]) throws Exception {\n\t\tProperties props = new Properties();\n\n\t\tprops.put(\"user\", \"email@example.com\");\n\t\tprops.put(\"password\", \"password\");\n\n\t\tprops.put(\"mail.store.protocol\", \"imap\");\n\t\tprops.put(\"mail.imap.host\", \"mail.example.com\");\n\t\tprops.put(\"mail.imap.port\", \"993\");\n\t\tprops.put(\"mail.imap.ssl.protocols\", \"SSL\");\n\t\tprops.put(\"mail.imap.starttls.enable\", \"true\");\n\n\t\tprops.put(\"mail.imap.socketFactory.class\",\n\t\t        \"javax.net.ssl.SSLSocketFactory\");\n\t\tprops.put(\"mail.imap.socketFactory.port\", \"993\");\n\t\tprops.put(\"mail.imap.socketFactory.fallback\", \"false\");\n\n\t\tSession session = Session.getDefaultInstance(props);\n\n\t\tStore store = session.getStore();\n\t\tSystem.err.println(\"connecting\");\n\t\tstore.connect(props.getProperty(\"user\").toString(), props.getProperty(\n\t\t        \"password\").toString());\n\n\t\tstore.close();\n\t\tSystem.err.println(\"done\");\n\t    }\n\n\t}\n\n",
            "digest": "217a171a23d7f4a581c38d55e9c5ce05",
            "encoding": "UTF-8",
            "length": 8979,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.platform.mail",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.mail.service.MailServiceImpl",
          "documentation": "\n    Services to to manage mails.\n\n    @author <a href=\"mailto:arussel@nuxeo.com\">Alexandre Russel</a>\n",
          "documentationHtml": "<p>\nServices to to manage mails.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.MailService",
              "descriptors": [
                "org.nuxeo.ecm.platform.mail.service.SessionFactoryDescriptor"
              ],
              "documentation": "\n\n      Extension point to register a session factory.\n\n      <p>\n        A session factory allows to create session for users. To create sessions\n        the factory needs informations such as host, port, protocol ... The list\n        of needed properties depends on the protocol used and if you need store,\n        transport or both. For more information see the\n        <a href=\"http://java.sun.com/products/javamail/javadocs/index.html\">\n          JavaMail API\n        </a>\n        .\n      </p>\n<p>\n        To get hold of a Session call: MailService mailService =\n        Framework.getService(MailSerivce.class); Transport transport =\n        mailSerivce.getTransport(\"myFactory\"); Store store =\n        mailServcie.getStore(\"myFactory\");\n      </p>\n<p>\n        The default is to get a session for the authenticated user if any, or\n        you can pass a String to get a session for a user.\n      </p>\n",
              "documentationHtml": "<p>\nExtension point to register a session factory.\n</p><p>\n</p><p>\nA session factory allows to create session for users. To create sessions\nthe factory needs informations such as host, port, protocol ... The list\nof needed properties depends on the protocol used and if you need store,\ntransport or both. For more information see the\n<a href=\"http://java.sun.com/products/javamail/javadocs/index.html\">\nJavaMail API\n</a>\n.\n</p>\n<p>\nTo get hold of a Session call: MailService mailService &#61;\nFramework.getService(MailSerivce.class); Transport transport &#61;\nmailSerivce.getTransport(&#34;myFactory&#34;); Store store &#61;\nmailServcie.getStore(&#34;myFactory&#34;);\n</p>\n<p>\nThe default is to get a session for the authenticated user if any, or\nyou can pass a String to get a session for a user.\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService/ExtensionPoints/org.nuxeo.ecm.platform.MailService--sessionFactory",
              "id": "org.nuxeo.ecm.platform.MailService--sessionFactory",
              "label": "sessionFactory (org.nuxeo.ecm.platform.MailService)",
              "name": "sessionFactory",
              "version": "10.10-HF20"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.MailService",
              "descriptors": [
                "org.nuxeo.ecm.platform.mail.fetcher.PropertiesFetcherDescriptor"
              ],
              "documentation": "\n      Extension point to register a properties fetcher.\n      <p>\n        The responsability of a property fetcher is to fetch properties from any\n        backend.\n      </p>\n",
              "documentationHtml": "<p>\nExtension point to register a properties fetcher.\n</p><p>\nThe responsability of a property fetcher is to fetch properties from any\nbackend.\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService/ExtensionPoints/org.nuxeo.ecm.platform.MailService--propertiesFetcher",
              "id": "org.nuxeo.ecm.platform.MailService--propertiesFetcher",
              "label": "propertiesFetcher (org.nuxeo.ecm.platform.MailService)",
              "name": "propertiesFetcher",
              "version": "10.10-HF20"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.MailService",
              "descriptors": [
                "org.nuxeo.ecm.platform.mail.action.MessageActionPipeDescriptor"
              ],
              "documentation": "\n      Extension point to register a list of actions.\n\n      <p>\n        An ActionPipe is a list of ActionMessage used for mail import. Default contribution\n        are merged but you can override them using 'override' attribute. \n\n      <code>\n        <pipe name=\"nxmail\" override=\"true\">\n            <action id=\"StartAction\" to=\"CreateDocumentsAction\">\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          </action>\n            <action id=\"CreateDocumentsAction\">\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n          </action>\n        </pipe>\n    </code>\n</p>\n<p>\n        When registering the ActionPipe, the service looks for an ActionMessage named\n        'StartAction', so this is a mandatory attribute. Registration of the pipe ends when\n        service doesn't find the next action.\n      </p>\n<p>\n        Since 6.0, you can use Automation to control how Documents are created from email. \n        For that you need to redefine the ActionPipe.\n        <code>\n        <pipe name=\"nxmail\" override=\"true\">\n            <action>\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          </action>\n            <action>\n            org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n          </action>\n            <action chain=\"CreateMailDocumentFromAutomation\">\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n          </action>\n        </pipe>\n    </code>\n        \n        Then the CreateMailDocumentFromAutomation Chain whill be used to create the content.\n      </p>\n",
              "documentationHtml": "<p>\nExtension point to register a list of actions.\n</p><p>\n</p><p>\nAn ActionPipe is a list of ActionMessage used for mail import. Default contribution\nare merged but you can override them using &#39;override&#39; attribute.\n</p><p>\n</p><pre><code>        &lt;pipe name&#61;&#34;nxmail&#34; override&#61;&#34;true&#34;&gt;\n            &lt;action id&#61;&#34;StartAction&#34; to&#61;&#34;CreateDocumentsAction&#34;&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          &lt;/action&gt;\n            &lt;action id&#61;&#34;CreateDocumentsAction&#34;&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n          &lt;/action&gt;\n        &lt;/pipe&gt;\n</code></pre><p>\n</p>\n<p>\nWhen registering the ActionPipe, the service looks for an ActionMessage named\n&#39;StartAction&#39;, so this is a mandatory attribute. Registration of the pipe ends when\nservice doesn&#39;t find the next action.\n</p>\n<p>\nSince 6.0, you can use Automation to control how Documents are created from email.\nFor that you need to redefine the ActionPipe.\n</p><p></p><pre><code>        &lt;pipe name&#61;&#34;nxmail&#34; override&#61;&#34;true&#34;&gt;\n            &lt;action&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          &lt;/action&gt;\n            &lt;action&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n          &lt;/action&gt;\n            &lt;action chain&#61;&#34;CreateMailDocumentFromAutomation&#34;&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n          &lt;/action&gt;\n        &lt;/pipe&gt;\n</code></pre><p>\nThen the CreateMailDocumentFromAutomation Chain whill be used to create the content.\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService/ExtensionPoints/org.nuxeo.ecm.platform.MailService--actionPipes",
              "id": "org.nuxeo.ecm.platform.MailService--actionPipes",
              "label": "actionPipes (org.nuxeo.ecm.platform.MailService)",
              "name": "actionPipes",
              "version": "10.10-HF20"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService",
          "name": "org.nuxeo.ecm.platform.MailService",
          "requirements": [],
          "resolutionOrder": 428,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.MailService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService/Services/org.nuxeo.ecm.platform.mail.service.MailService",
              "id": "org.nuxeo.ecm.platform.mail.service.MailService",
              "overriden": false,
              "version": "10.10-HF20"
            }
          ],
          "startOrder": 881,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.MailService\">\n  <documentation>\n    Services to to manage mails.\n\n    @author <a href=\"mailto:arussel@nuxeo.com\">Alexandre Russel</a>\n  </documentation>\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.mail.service.MailService\" />\n  </service>\n  <implementation class=\"org.nuxeo.ecm.platform.mail.service.MailServiceImpl\" />\n  <extension-point name=\"sessionFactory\">\n    <documentation>\n      Extension point to register a session factory.\n\n      <p>\n        A session factory allows to create session for users. To create sessions\n        the factory needs informations such as host, port, protocol ... The list\n        of needed properties depends on the protocol used and if you need store,\n        transport or both. For more information see the\n        <a href=\"http://java.sun.com/products/javamail/javadocs/index.html\">\n          JavaMail API\n        </a>\n        .\n      </p>\n      <p>\n        To get hold of a Session call: MailService mailService =\n        Framework.getService(MailSerivce.class); Transport transport =\n        mailSerivce.getTransport(\"myFactory\"); Store store =\n        mailServcie.getStore(\"myFactory\");\n      </p>\n      <p>\n        The default is to get a session for the authenticated user if any, or\n        you can pass a String to get a session for a user.\n      </p>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.mail.service.SessionFactoryDescriptor\" />\n  </extension-point>\n  <extension-point name=\"propertiesFetcher\">\n    <documentation>\n      Extension point to register a properties fetcher.\n      <p>\n        The responsability of a property fetcher is to fetch properties from any\n        backend.\n      </p>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.mail.fetcher.PropertiesFetcherDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"actionPipes\">\n    <documentation>\n      Extension point to register a list of actions.\n\n      <p>\n        An ActionPipe is a list of ActionMessage used for mail import. Default contribution\n        are merged but you can override them using 'override' attribute. \n\n      <code>\n        <pipe name=\"nxmail\" override=\"true\">\n          <action id=\"StartAction\" to=\"CreateDocumentsAction\">\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          </action>\n          <action id=\"CreateDocumentsAction\">\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n          </action>\n        </pipe>\n      </code>\n      </p>\n\n      <p>\n        When registering the ActionPipe, the service looks for an ActionMessage named\n        'StartAction', so this is a mandatory attribute. Registration of the pipe ends when\n        service doesn't find the next action.\n      </p>\n\n      <p>\n        Since 6.0, you can use Automation to control how Documents are created from email. \n        For that you need to redefine the ActionPipe.\n        <code>\n         <pipe name=\"nxmail\"  override=\"true\">\n          <action>\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          </action>\n          <action>\n            org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n          </action>\n          <action chain=\"CreateMailDocumentFromAutomation\">\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n          </action>\n         </pipe>\n        </code>\n        \n        Then the CreateMailDocumentFromAutomation Chain whill be used to create the content.\n      </p>\n\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.mail.action.MessageActionPipeDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.MailService--propertiesFetcher",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.service.MailServiceContrib/Contributions/org.nuxeo.ecm.platform.mail.service.MailServiceContrib--propertiesFetcher",
              "id": "org.nuxeo.ecm.platform.mail.service.MailServiceContrib--propertiesFetcher",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.MailService",
                "name": "org.nuxeo.ecm.platform.MailService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"propertiesFetcher\" target=\"org.nuxeo.ecm.platform.MailService\">\n    <propertiesFetcher class=\"org.nuxeo.ecm.platform.mail.fetcher.SimplePropertiesFetcher\" name=\"simple\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.MailService--actionPipes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.service.MailServiceContrib/Contributions/org.nuxeo.ecm.platform.mail.service.MailServiceContrib--actionPipes",
              "id": "org.nuxeo.ecm.platform.mail.service.MailServiceContrib--actionPipes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.MailService",
                "name": "org.nuxeo.ecm.platform.MailService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"actionPipes\" target=\"org.nuxeo.ecm.platform.MailService\">\n\n    <pipe name=\"nxmail\">\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n    </pipe>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.service.MailServiceContrib",
          "name": "org.nuxeo.ecm.platform.mail.service.MailServiceContrib",
          "requirements": [
            "org.nuxeo.ecm.platform.MailService"
          ],
          "resolutionOrder": 429,
          "services": [],
          "startOrder": 386,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.service.MailServiceContrib\">\n  <require>org.nuxeo.ecm.platform.MailService</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.MailService\"\n    point=\"propertiesFetcher\">\n    <propertiesFetcher name=\"simple\" class=\"org.nuxeo.ecm.platform.mail.fetcher.SimplePropertiesFetcher\"/>\n  </extension>\n  \n  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\n    <pipe name=\"nxmail\">\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n    </pipe>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.listener.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.listener.contrib--listener",
              "id": "org.nuxeo.ecm.platform.mail.core.listener.contrib--listener",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.mail.listener.MailEventListener\" name=\"mailReceivedListener\" postCommit=\"true\" priority=\"140\">\n      <event>MailReceivedEvent</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.listener.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.listener.contrib",
          "requirements": [],
          "resolutionOrder": 430,
          "services": [],
          "startOrder": 378,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.listener.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"mailReceivedListener\" async=\"true\"\n      postCommit=\"true\" priority=\"140\"\n      class=\"org.nuxeo.ecm.platform.mail.listener.MailEventListener\">\n      <event>MailReceivedEvent</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent--BlobHolderFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.blobholder/Contributions/org.nuxeo.ecm.platform.mail.core.blobholder--BlobHolderFactory",
              "id": "org.nuxeo.ecm.platform.mail.core.blobholder--BlobHolderFactory",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
                "name": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"BlobHolderFactory\" target=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\">\n    <blobHolderFactory class=\"org.nuxeo.ecm.platform.mail.adapter.MailMessageBlobHolderfactory\" docType=\"MailMessage\" name=\"mailMessage\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.blobholder",
          "name": "org.nuxeo.ecm.platform.mail.core.blobholder",
          "requirements": [],
          "resolutionOrder": 431,
          "services": [],
          "startOrder": 376,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.blobholder\">\n\n  <extension\n    target=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\"\n    point=\"BlobHolderFactory\">\n    <blobHolderFactory name=\"mailMessage\" docType=\"MailMessage\"\n      class=\"org.nuxeo.ecm.platform.mail.adapter.MailMessageBlobHolderfactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-blobholder-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.mail.automation.chains/Contributions/org.nuxeo.mail.automation.chains--chains",
              "id": "org.nuxeo.mail.automation.chains--chains",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param name=\"name\" type=\"string\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param name=\"type\" type=\"string\">MailMessage</param>\n        <param name=\"name\" type=\"string\">expr:Context[\"mailDocumentName\"]</param>\n        <param name=\"properties\" type=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param name=\"name\" type=\"string\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param name=\"id\" type=\"string\">ProcessAttachment</param>\n        <param name=\"list\" type=\"string\">attachments</param>\n        <param name=\"isolate\" type=\"boolean\">true</param>\n        <param name=\"item\" type=\"string\">attachment</param>\n      </operation>\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:htmlText\",Context[\"text\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param name=\"name\" type=\"string\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param name=\"name\" type=\"string\">attachment</param>\n      </operation>\n      <operation id=\"Blob.AttachOnDocument\">\n        <param name=\"document\" type=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param name=\"save\" type=\"boolean\">false</param>\n        <param name=\"xpath\" type=\"string\">files:files</param>\n      </operation>\n    </chain>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.mail.automation.chains",
          "name": "org.nuxeo.mail.automation.chains",
          "requirements": [],
          "resolutionOrder": 432,
          "services": [],
          "startOrder": 727,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"org.nuxeo.mail.automation.chains\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"chains\">\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:htmlText\",Context[\"text\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.AttachOnDocument\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n  </extension>\n\n</component>\n  ",
          "xmlFileName": "/OSGI-INF/automation-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.operations.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.operations.contrib--operations",
              "id": "org.nuxeo.ecm.platform.mail.core.operations.contrib--operations",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.platform.mail.operations.MailCheckInboxOperation\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.operations.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.operations.contrib",
          "requirements": [],
          "resolutionOrder": 433,
          "services": [],
          "startOrder": 379,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.operations.contrib\">\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.platform.mail.operations.MailCheckInboxOperation\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib--policies",
              "id": "org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib--policies",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n    <policy class=\"org.nuxeo.ecm.platform.mail.security.MailMessageSecurityPolicy\" name=\"MailMessage\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib",
          "requirements": [],
          "resolutionOrder": 434,
          "services": [],
          "startOrder": 380,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib\">\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\" point=\"policies\">\n    <policy name=\"MailMessage\" class=\"org.nuxeo.ecm.platform.mail.security.MailMessageSecurityPolicy\"/>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/security-policy-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-mail-core-10.10-HF20.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail",
      "id": "org.nuxeo.ecm.platform.mail",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_222\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 10.10-HF20-t20191228-021538\r\nBundle-Name: Nuxeo ECM Mail Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.mail;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nRequire-Bundle: org.nuxeo.ecm.core.api,org.nuxeo.ecm.core.event\r\nEclipse-LazyStart: false\r\nNuxeo-Component: OSGI-INF/nxmail-framework.xml,OSGI-INF/nxmail-contrib\r\n .xml,OSGI-INF/nxmail-listener-contrib.xml,OSGI-INF/nxmail-blobholder-\r\n contrib.xml,OSGI-INF/automation-contrib.xml,OSGI-INF/operations-contr\r\n ib.xml,OSGI-INF/security-policy-contrib.xml\r\nProvide-Package: org.nuxeo.ecm.platform.mail\r\n\r\n",
      "maxResolutionOrder": 434,
      "minResolutionOrder": 428,
      "packages": [
        "nuxeo-10.10-HF20",
        "nuxeo-imap-connector"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n",
        "digest": "5c14b7245188fbe51fcebd6e4c6eff98",
        "encoding": "UTF-8",
        "length": 7955,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core.event"
      ],
      "version": "10.10-HF20"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-mail-jsf",
      "artifactVersion": "10.10",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.mail.jsf",
          "org.nuxeo.ecm.platform.mail.types",
          "org.nuxeo.ecm.platform.mail.webui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail",
        "id": "grp:org.nuxeo.ecm.platform.mail",
        "name": "org.nuxeo.ecm.platform.mail",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n",
            "digest": "5c14b7245188fbe51fcebd6e4c6eff98",
            "encoding": "UTF-8",
            "length": 7955,
            "mimeType": "text/plain",
            "name": "README.md"
          },
          {
            "blobProviderId": "default",
            "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n\nTo test your setting you can use this class:\nA TestConnection class sample\n\n\tpublic class TestImapConnection {\n\n\t    public static void main(String args[]) throws Exception {\n\t\tProperties props = new Properties();\n\n\t\tprops.put(\"user\", \"email@example.com\");\n\t\tprops.put(\"password\", \"password\");\n\n\t\tprops.put(\"mail.store.protocol\", \"imap\");\n\t\tprops.put(\"mail.imap.host\", \"mail.example.com\");\n\t\tprops.put(\"mail.imap.port\", \"993\");\n\t\tprops.put(\"mail.imap.ssl.protocols\", \"SSL\");\n\t\tprops.put(\"mail.imap.starttls.enable\", \"true\");\n\n\t\tprops.put(\"mail.imap.socketFactory.class\",\n\t\t        \"javax.net.ssl.SSLSocketFactory\");\n\t\tprops.put(\"mail.imap.socketFactory.port\", \"993\");\n\t\tprops.put(\"mail.imap.socketFactory.fallback\", \"false\");\n\n\t\tSession session = Session.getDefaultInstance(props);\n\n\t\tStore store = session.getStore();\n\t\tSystem.err.println(\"connecting\");\n\t\tstore.connect(props.getProperty(\"user\").toString(), props.getProperty(\n\t\t        \"password\").toString());\n\n\t\tstore.close();\n\t\tSystem.err.println(\"done\");\n\t    }\n\n\t}\n\n",
            "digest": "217a171a23d7f4a581c38d55e9c5ce05",
            "encoding": "UTF-8",
            "length": 8979,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.platform.mail.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.actions.contrib/Contributions/org.nuxeo.ecm.platform.mail.jsf.actions.contrib--actions",
              "id": "org.nuxeo.ecm.platform.mail.jsf.actions.contrib--actions",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n    \n    <action id=\"TAB_FILES_EDIT\">\n      <filter-id>not_mail_message_document</filter-id>\n    </action>\n    \n    <action id=\"TAB_EDIT\">\n      <filter-id>not_mail_message_document</filter-id>\n    </action>\n    \n    <action id=\"TAB_METADATA_EDIT\">\n      <filter-id>not_mail_folder_document</filter-id>\n    </action>\n    \n    <action id=\"TAB_METADATA_VIEW\">\n      <filter-id>not_mail_folder_document</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.actions.contrib/Contributions/org.nuxeo.ecm.platform.mail.jsf.actions.contrib--filters",
              "id": "org.nuxeo.ecm.platform.mail.jsf.actions.contrib--filters",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"not_mail_message_document\">\n      <rule grant=\"false\">\n        <type>MailMessage</type>\n      </rule>\n    </filter>\n    \n    <filter id=\"not_mail_folder_document\">\n      <rule grant=\"false\">\n        <type>MailFolder</type>\n      </rule>\n    </filter>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.actions.contrib/Contributions/org.nuxeo.ecm.platform.mail.jsf.actions.contrib--actions1",
              "id": "org.nuxeo.ecm.platform.mail.jsf.actions.contrib--actions1",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n\t  <action enabled=\"true\" id=\"user_inbox\" label=\"command.check.mail.connection\" link=\"#{mailActions.checkCurrentInbox}\" order=\"10\">\n\t    <category>SUBVIEW_UPPER_LIST</category>\n\t    <filter>\n\t      <rule grant=\"true\">\n\t        <type>MailFolder</type>\n\t      </rule>\n\t    </filter>\n\t  </action>\n\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.actions.contrib",
          "name": "org.nuxeo.ecm.platform.mail.jsf.actions.contrib",
          "requirements": [],
          "resolutionOrder": 435,
          "services": [],
          "startOrder": 382,
          "version": "10.10",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n\r\n<component name=\"org.nuxeo.ecm.platform.mail.jsf.actions.contrib\">\r\n\r\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\r\n    point=\"actions\">\r\n    \r\n    <action id=\"TAB_FILES_EDIT\">\r\n      <filter-id>not_mail_message_document</filter-id>\r\n    </action>\r\n    \r\n    <action id=\"TAB_EDIT\">\r\n      <filter-id>not_mail_message_document</filter-id>\r\n    </action>\r\n    \r\n    <action id=\"TAB_METADATA_EDIT\">\r\n      <filter-id>not_mail_folder_document</filter-id>\r\n    </action>\r\n    \r\n    <action id=\"TAB_METADATA_VIEW\">\r\n      <filter-id>not_mail_folder_document</filter-id>\r\n    </action>\r\n\r\n  </extension>\r\n\r\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\r\n    point=\"filters\">\r\n\r\n    <filter id=\"not_mail_message_document\">\r\n      <rule grant=\"false\">\r\n        <type>MailMessage</type>\r\n      </rule>\r\n    </filter>\r\n    \r\n    <filter id=\"not_mail_folder_document\">\r\n      <rule grant=\"false\">\r\n        <type>MailFolder</type>\r\n      </rule>\r\n    </filter>\r\n\r\n  </extension>\r\n  \r\n    <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\r\n      point=\"actions\">\r\n\r\n\t  <action id=\"user_inbox\" link=\"#{mailActions.checkCurrentInbox}\" enabled=\"true\"\r\n\t    label=\"command.check.mail.connection\" order=\"10\">\r\n\t    <category>SUBVIEW_UPPER_LIST</category>\r\n\t    <filter>\r\n\t      <rule grant=\"true\">\r\n\t        <type>MailFolder</type>\r\n\t      </rule>\r\n\t    </filter>\r\n\t  </action>\r\n\r\n    </extension>\r\n  \r\n</component>\r\n",
          "xmlFileName": "/OSGI-INF/nxmail-actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.ContentViewService--contentViews",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.contentview.contrib/Contributions/org.nuxeo.ecm.platform.mail.jsf.contentview.contrib--contentViews",
              "id": "org.nuxeo.ecm.platform.mail.jsf.contentview.contrib--contentViews",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "name": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"contentViews\" target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\">\n    <contentView name=\"mail_document_content\">\n\n      <title>label.contentview.document_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n        <whereClause docType=\"AdvancedSearch\">\n          <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n            <field name=\"fulltext_all\" schema=\"advanced_search\"/>\n          </predicate>\n          <predicate operator=\"FULLTEXT\" parameter=\"dc:title\">\n            <field name=\"title\" schema=\"advanced_search\"/>\n          </predicate>\n          <predicate operator=\"BETWEEN\" parameter=\"dc:modified\">\n            <field name=\"modified_min\" schema=\"advanced_search\"/>\n            <field name=\"modified_max\" schema=\"advanced_search\"/>\n          </predicate>\n          <fixedPart>\n            ecm:parentId = ? AND ecm:isVersion = 0 AND\n            ecm:mixinType !=\n            'HiddenInNavigation' AND\n            ecm:isTrashed = 0\n          </fixedPart>\n        </whereClause>\n        <parameter>#{currentDocument.id}</parameter>\n        <sort ascending=\"true\" column=\"dc:title\"/>\n        <pageSize>20</pageSize>\n      </coreQueryPageProvider>\n\n      <searchLayout filterDisplayType=\"quick\" name=\"document_content_filter\"/>\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>#{currentDocument.repositoryName}_#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/mail_listing_icon.png\" name=\"mail_listing\" showCSVExport=\"false\" showPDFExport=\"false\" showSyndicationLinks=\"true\" title=\"mail_listing\" translateTitle=\"false\"/>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_listing_table\" showCSVExport=\"true\" showEditColumns=\"true\" showSpreadsheet=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"CURRENT_SELECTION_LIST\"/>\n\n    </contentView>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.contentview.contrib",
          "name": "org.nuxeo.ecm.platform.mail.jsf.contentview.contrib",
          "requirements": [],
          "resolutionOrder": 436,
          "services": [],
          "startOrder": 383,
          "version": "10.10",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.jsf.contentview.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\"\n    point=\"contentViews\">\n    <contentView name=\"mail_document_content\">\n\n      <title>label.contentview.document_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n        <whereClause docType=\"AdvancedSearch\">\n          <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n            <field schema=\"advanced_search\" name=\"fulltext_all\" />\n          </predicate>\n          <predicate parameter=\"dc:title\" operator=\"FULLTEXT\">\n            <field schema=\"advanced_search\" name=\"title\" />\n          </predicate>\n          <predicate parameter=\"dc:modified\" operator=\"BETWEEN\">\n            <field schema=\"advanced_search\" name=\"modified_min\" />\n            <field schema=\"advanced_search\" name=\"modified_max\" />\n          </predicate>\n          <fixedPart>\n            ecm:parentId = ? AND ecm:isVersion = 0 AND\n            ecm:mixinType !=\n            'HiddenInNavigation' AND\n            ecm:isTrashed = 0\n          </fixedPart>\n        </whereClause>\n        <parameter>#{currentDocument.id}</parameter>\n        <sort column=\"dc:title\" ascending=\"true\" />\n        <pageSize>20</pageSize>\n      </coreQueryPageProvider>\n\n      <searchLayout name=\"document_content_filter\"\n        filterDisplayType=\"quick\" />\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>#{currentDocument.repositoryName}_#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"mail_listing\" title=\"mail_listing\"\n          translateTitle=\"false\" iconPath=\"/icons/mail_listing_icon.png\"\n          showCSVExport=\"false\" showPDFExport=\"false\"\n          showSyndicationLinks=\"true\" />\n        <layout name=\"document_listing_table\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSpreadsheet=\"true\" showEditColumns=\"true\" />\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"CURRENT_SELECTION_LIST\" />\n\n    </contentView>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-contentview-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.layouts.contrib/Contributions/org.nuxeo.ecm.platform.mail.jsf.layouts.contrib--widgettypes",
              "id": "org.nuxeo.ecm.platform.mail.jsf.layouts.contrib--widgettypes",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"listing_mail_body\">\n\n      <documentation>\n        This widget type displays the first words of the mail Body\n        <br/>\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            first field mapping the mail text property.\n          </li>\n          <li>\n            first field mapping the mail htmlText property.\n          </li>\n          <li>\n            first field mapping the document title property.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_body_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_mail_contact\">\n\n      <documentation>\n        This widget type displays the mail addresses within a mailTo link.\n        <br/>\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            first field mapping the mail sender property.\n          </li>\n          <li>\n            second field mapping the mail recipient property.\n          </li>\n          <li>\n            third field mapping the mail cc_recipient property.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_contact_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_mail_object\">\n\n      <documentation>\n        This widget type displays the mail object and the sending date.\n        <br/>\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            first field mapping the dublincore title property.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_object_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_mail_sending_date\">\n\n      <documentation>\n        This widget type displays the sending date.\n        <br/>\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            First field mapping the mail sending_date property.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_sending_date_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_mail_attachments\">\n\n      <documentation>\n        This widget type displays the mail attachments. This widget requires\n        a document with the files schema.\n        <br/>\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            first field mapping the files property.\n          </li>\n          <li>\n            second field mapping the document.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_attachments_widget_template.xhtml\n      </property>\n    </widgetType>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.layouts.contrib/Contributions/org.nuxeo.ecm.platform.mail.jsf.layouts.contrib--layouts",
              "id": "org.nuxeo.ecm.platform.mail.jsf.layouts.contrib--layouts",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"mail_listing\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_listing_ajax_template.xhtml</template>\n      </templates>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"isListingSelectionBoxWithCurrentDocument\">\n              true\n            </property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"isSortable\">false</property>\n          </properties>\n          <widget>listing_mail_object</widget>\n          <widget>listing_mail_sending_date</widget>\n          <widget>listing_mail_contact</widget>\n          <widget>listing_mail_body</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"isSortable\">false</property>\n          </properties>\n          <widget>listing_mail_attachments</widget>\n        </column>\n      </columns>\n\n      <widget name=\"listing_mail_object\" type=\"listing_mail_object\">\n        <labels>\n          <label mode=\"any\">label.mail.sender</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>data</field>\n          <field>data.ref</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"listing_mail_sending_date\" type=\"listing_mail_sending_date\">\n        <labels>\n          <label mode=\"any\">label.mail.sendingDate</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>data.mail.sending_date</field>\n        </fields>\n      </widget>\n      <widget name=\"listing_mail_contact\" type=\"listing_mail_contact\">\n        <labels>\n          <label mode=\"any\">label.mail.sender</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>data.mail.sender</field>\n          <field>data.mail.recipients</field>\n          <field>data.mail.cc_recipients</field>\n        </fields>\n      </widget>\n      <widget name=\"listing_mail_body\" type=\"listing_mail_body\">\n        <labels>\n          <label mode=\"any\">label.mail.text</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>data.mail.text</field>\n          <field>data.mail.htmlText</field>\n          <field>data.dc.title</field>\n          <field>data.id</field>\n        </fields>\n      </widget>\n      <widget name=\"listing_mail_attachments\" type=\"listing_mail_attachments\">\n        <labels>\n          <label mode=\"any\">label.mail.attachments</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>data.files.files</field>\n          <field>data</field>\n        </fields>\n      </widget>\n    </layout>\n\n    <layout name=\"mailMessage\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n      \t<row>\n          <widget>title</widget>\n        </row>\n        <row>\n          <widget>sender</widget>\n        </row>\n        <row>\n          <widget>sending_date</widget>\n        </row>\n        <row>\n          <widget>recipients</widget>\n        </row>\n        <row>\n          <widget>cc_recipients</widget>\n        </row>\n        <row>\n          <widget>text</widget>\n        </row>\n      </rows>\n      <widget name=\"title\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.title</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <translated>true</translated>\n        <fields>\n          <field>dc:title</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"sender\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.sender</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>mail:sender</field>\n        </fields>\n      </widget>\n      <widget name=\"sending_date\" type=\"datetime\">\n        <labels>\n          <label mode=\"any\">label.mail.sending_date</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>mail:sending_date</field>\n        </fields>\n        <properties widgetMode=\"view\">\n          <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n        </properties>\n      </widget>\n      <widget name=\"recipients\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.recipients</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>mail:recipients</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">/widgets/join_list_widget_template.xhtml</property>\n        </properties>\n      </widget>\n      <widget name=\"cc_recipients\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.cc_recipients</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>mail:cc_recipients</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">/widgets/join_list_widget_template.xhtml</property>\n        </properties>\n      </widget>\n      <widget name=\"text\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.text</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">/widgets/email_text_widget_template.xhtml</property>\n        </properties>\n        <fields>\n          <field>id</field>\n          <field>repositoryName</field>\n        </fields>\n      </widget>\n    </layout>\n    \n    <layout name=\"noLabelFiles\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>files</widget>\n        </row>\n      </rows>\n      <widget name=\"files\" type=\"list\">\n        <labels>\n          <label mode=\"any\">label.mail.files</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"files\">files</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"diff\">true</property>\n        </properties>\n        <properties mode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <subWidgets>\n          <widget name=\"file\" type=\"file\">\n        <labels>\n          <label mode=\"any\"/>\n        </labels>\n        <translated>true</translated>\n            <fields>\n              <field>file</field>\n              <field>file/name</field>\n            </fields>\n          </widget>\n        </subWidgets>\n      </widget>\n    </layout>\n    \n    <layout name=\"mail_folder\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>title</widget>\n        </row>\n        <row>\n          <widget>email</widget>\n        </row>\n        <row>\n          <widget>password</widget>\n        </row>\n        <row>\n          <widget>protocol_type</widget>\n        </row>\n        <row>\n          <widget>host</widget>\n        </row>\n        <row>\n          <widget>port</widget>\n        </row>\n        <row>\n          <widget>socket_factory_fallback</widget>\n        </row>\n        <row>\n          <widget>socket_factory_port</widget>\n        </row>\n        <row>\n          <widget>starttls_enable</widget>\n        </row>\n        <row>\n          <widget>ssl_protocols</widget>\n        </row>\n        <row>\n          <widget>emails_limit</widget>\n        </row>\n      </rows>\n      <widget name=\"title\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.title</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>dc:title</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"email\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.email</label>\n        </labels>\n        <fields>\n          <field>prot:email</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"required\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"password\" type=\"secret\">********<labels>\n          <label mode=\"any\">label.mail.folder.password</label>\n        </labels>\n        <fields>\n          <field>prot:password</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"required\">true</property>\n          <property name=\"redisplay\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"protocol_type\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.protocol_type</label>\n        </labels>\n        <fields>\n          <field>prot:protocol_type</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n        </properties>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/protocol_type_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"host\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.host</label>\n        </labels>\n        <fields>\n          <field>prot:host</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"port\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.port</label>\n        </labels>\n        <fields>\n          <field>prot:port</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"socket_factory_fallback\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.socket_factory_fallback</label>\n        </labels>\n        <fields>\n          <field>prot:socket_factory_fallback</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/boolean_radio_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"socket_factory_port\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.socket_factory_port</label>\n        </labels>\n        <fields>\n          <field>prot:socket_factory_port</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"starttls_enable\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.starttls_enable</label>\n        </labels>\n        <fields>\n          <field>prot:starttls_enable</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/boolean_radio_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"ssl_protocols\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.ssl_protocols</label>\n        </labels>\n        <fields>\n          <field>prot:ssl_protocols</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/emails_ssl_protocols_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"emails_limit\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.emails_limit</label>\n        </labels>\n        <fields>\n          <field>prot:emails_limit</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n        </properties>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/emails_limit_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf/org.nuxeo.ecm.platform.mail.jsf.layouts.contrib",
          "name": "org.nuxeo.ecm.platform.mail.jsf.layouts.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.forms.layouts.webapp"
          ],
          "resolutionOrder": 709,
          "services": [],
          "startOrder": 384,
          "version": "10.10",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.jsf.layouts.contrib\">\n  <require>org.nuxeo.ecm.platform.forms.layouts.webapp</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"listing_mail_body\">\n\n      <documentation>\n        This widget type displays the first words of the mail Body\n        <br />\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            first field mapping the mail text property.\n          </li>\n          <li>\n            first field mapping the mail htmlText property.\n          </li>\n          <li>\n            first field mapping the document title property.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_body_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_mail_contact\">\n\n      <documentation>\n        This widget type displays the mail addresses within a mailTo link.\n        <br />\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            first field mapping the mail sender property.\n          </li>\n          <li>\n            second field mapping the mail recipient property.\n          </li>\n          <li>\n            third field mapping the mail cc_recipient property.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_contact_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_mail_object\">\n\n      <documentation>\n        This widget type displays the mail object and the sending date.\n        <br />\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            first field mapping the dublincore title property.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_object_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_mail_sending_date\">\n\n      <documentation>\n        This widget type displays the sending date.\n        <br />\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            First field mapping the mail sending_date property.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_sending_date_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_mail_attachments\">\n\n      <documentation>\n        This widget type displays the mail attachments. This widget requires\n        a document with the files schema.\n        <br />\n        It requires the following fields configuration:\n        <ul>\n          <li>\n            first field mapping the files property.\n          </li>\n          <li>\n            second field mapping the document.\n          </li>\n        </ul>\n      </documentation>\n      <configuration>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_mail_attachments_widget_template.xhtml\n      </property>\n    </widgetType>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"mail_listing\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_listing_ajax_template.xhtml</template>\n      </templates>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"isListingSelectionBoxWithCurrentDocument\">\n              true\n            </property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"isSortable\">false</property>\n          </properties>\n          <widget>listing_mail_object</widget>\n          <widget>listing_mail_sending_date</widget>\n          <widget>listing_mail_contact</widget>\n          <widget>listing_mail_body</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"isSortable\">false</property>\n          </properties>\n          <widget>listing_mail_attachments</widget>\n        </column>\n      </columns>\n\n      <widget name=\"listing_mail_object\" type=\"listing_mail_object\">\n        <labels>\n          <label mode=\"any\">label.mail.sender</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>data</field>\n          <field>data.ref</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"listing_mail_sending_date\" type=\"listing_mail_sending_date\">\n        <labels>\n          <label mode=\"any\">label.mail.sendingDate</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>data.mail.sending_date</field>\n        </fields>\n      </widget>\n      <widget name=\"listing_mail_contact\" type=\"listing_mail_contact\">\n        <labels>\n          <label mode=\"any\">label.mail.sender</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>data.mail.sender</field>\n          <field>data.mail.recipients</field>\n          <field>data.mail.cc_recipients</field>\n        </fields>\n      </widget>\n      <widget name=\"listing_mail_body\" type=\"listing_mail_body\">\n        <labels>\n          <label mode=\"any\">label.mail.text</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>data.mail.text</field>\n          <field>data.mail.htmlText</field>\n          <field>data.dc.title</field>\n          <field>data.id</field>\n        </fields>\n      </widget>\n      <widget name=\"listing_mail_attachments\" type=\"listing_mail_attachments\">\n        <labels>\n          <label mode=\"any\">label.mail.attachments</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>data.files.files</field>\n          <field>data</field>\n        </fields>\n      </widget>\n    </layout>\n\n    <layout name=\"mailMessage\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n      \t<row>\n          <widget>title</widget>\n        </row>\n        <row>\n          <widget>sender</widget>\n        </row>\n        <row>\n          <widget>sending_date</widget>\n        </row>\n        <row>\n          <widget>recipients</widget>\n        </row>\n        <row>\n          <widget>cc_recipients</widget>\n        </row>\n        <row>\n          <widget>text</widget>\n        </row>\n      </rows>\n      <widget name=\"title\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.title</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <translated>true</translated>\n        <fields>\n          <field>dc:title</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"sender\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.sender</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>mail:sender</field>\n        </fields>\n      </widget>\n      <widget name=\"sending_date\" type=\"datetime\">\n        <labels>\n          <label mode=\"any\">label.mail.sending_date</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>mail:sending_date</field>\n        </fields>\n        <properties widgetMode=\"view\">\n          <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n        </properties>\n      </widget>\n      <widget name=\"recipients\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.recipients</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>mail:recipients</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">/widgets/join_list_widget_template.xhtml</property>\n        </properties>\n      </widget>\n      <widget name=\"cc_recipients\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.cc_recipients</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <fields>\n          <field>mail:cc_recipients</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">/widgets/join_list_widget_template.xhtml</property>\n        </properties>\n      </widget>\n      <widget name=\"text\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.text</label>\n        </labels>\n        <widgetModes>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">/widgets/email_text_widget_template.xhtml</property>\n        </properties>\n        <fields>\n          <field>id</field>\n          <field>repositoryName</field>\n        </fields>\n      </widget>\n    </layout>\n    \n    <layout name=\"noLabelFiles\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>files</widget>\n        </row>\n      </rows>\n      <widget name=\"files\" type=\"list\">\n        <labels>\n          <label mode=\"any\">label.mail.files</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"files\">files</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"diff\">true</property>\n        </properties>\n        <properties mode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <subWidgets>\n          <widget name=\"file\" type=\"file\">\n        <labels>\n          <label mode=\"any\"></label>\n        </labels>\n        <translated>true</translated>\n            <fields>\n              <field>file</field>\n              <field>file/name</field>\n            </fields>\n          </widget>\n        </subWidgets>\n      </widget>\n    </layout>\n    \n    <layout name=\"mail_folder\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>title</widget>\n        </row>\n        <row>\n          <widget>email</widget>\n        </row>\n        <row>\n          <widget>password</widget>\n        </row>\n        <row>\n          <widget>protocol_type</widget>\n        </row>\n        <row>\n          <widget>host</widget>\n        </row>\n        <row>\n          <widget>port</widget>\n        </row>\n        <row>\n          <widget>socket_factory_fallback</widget>\n        </row>\n        <row>\n          <widget>socket_factory_port</widget>\n        </row>\n        <row>\n          <widget>starttls_enable</widget>\n        </row>\n        <row>\n          <widget>ssl_protocols</widget>\n        </row>\n        <row>\n          <widget>emails_limit</widget>\n        </row>\n      </rows>\n      <widget name=\"title\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.title</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>dc:title</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"email\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.email</label>\n        </labels>\n        <fields>\n          <field>prot:email</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"required\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"password\" type=\"secret\">********<labels>\n          <label mode=\"any\">label.mail.folder.password</label>\n        </labels>\n        <fields>\n          <field>prot:password</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"required\">true</property>\n          <property name=\"redisplay\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"protocol_type\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.protocol_type</label>\n        </labels>\n        <fields>\n          <field>prot:protocol_type</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n        </properties>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/protocol_type_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"host\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.host</label>\n        </labels>\n        <fields>\n          <field>prot:host</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"port\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.port</label>\n        </labels>\n        <fields>\n          <field>prot:port</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"socket_factory_fallback\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.socket_factory_fallback</label>\n        </labels>\n        <fields>\n          <field>prot:socket_factory_fallback</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/boolean_radio_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"socket_factory_port\" type=\"text\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.socket_factory_port</label>\n        </labels>\n        <fields>\n          <field>prot:socket_factory_port</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"starttls_enable\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.starttls_enable</label>\n        </labels>\n        <fields>\n          <field>prot:starttls_enable</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/boolean_radio_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"ssl_protocols\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.ssl_protocols</label>\n        </labels>\n        <fields>\n          <field>prot:ssl_protocols</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/emails_ssl_protocols_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"emails_limit\" type=\"template\">\n        <labels>\n          <label mode=\"any\">label.mail.folder.emails_limit</label>\n        </labels>\n        <fields>\n          <field>prot:emails_limit</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n        </properties>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/emails_limit_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-layouts-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-mail-jsf-10.10.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.jsf",
      "id": "org.nuxeo.ecm.platform.mail.jsf",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_191\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Mail JSF\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.mail.jsf;singleton:=true\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: stateless\r\nEclipse-LazyStart: false\r\nRequire-Bundle:  org.nuxeo.ecm.core.api,org.nuxeo.ecm.webapp.core,org.\r\n nuxeo.ecm.platform.mail\r\nNuxeo-Component: OSGI-INF/nxmail-actions-contrib.xml,OSGI-INF/nxmail-l\r\n ayouts-contrib.xml,OSGI-INF/nxmail-contentview-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 709,
      "minResolutionOrder": 435,
      "packages": [
        "nuxeo-imap-connector"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n\nTo test your setting you can use this class:\nA TestConnection class sample\n\n\tpublic class TestImapConnection {\n\n\t    public static void main(String args[]) throws Exception {\n\t\tProperties props = new Properties();\n\n\t\tprops.put(\"user\", \"email@example.com\");\n\t\tprops.put(\"password\", \"password\");\n\n\t\tprops.put(\"mail.store.protocol\", \"imap\");\n\t\tprops.put(\"mail.imap.host\", \"mail.example.com\");\n\t\tprops.put(\"mail.imap.port\", \"993\");\n\t\tprops.put(\"mail.imap.ssl.protocols\", \"SSL\");\n\t\tprops.put(\"mail.imap.starttls.enable\", \"true\");\n\n\t\tprops.put(\"mail.imap.socketFactory.class\",\n\t\t        \"javax.net.ssl.SSLSocketFactory\");\n\t\tprops.put(\"mail.imap.socketFactory.port\", \"993\");\n\t\tprops.put(\"mail.imap.socketFactory.fallback\", \"false\");\n\n\t\tSession session = Session.getDefaultInstance(props);\n\n\t\tStore store = session.getStore();\n\t\tSystem.err.println(\"connecting\");\n\t\tstore.connect(props.getProperty(\"user\").toString(), props.getProperty(\n\t\t        \"password\").toString());\n\n\t\tstore.close();\n\t\tSystem.err.println(\"done\");\n\t    }\n\n\t}\n\n",
        "digest": "217a171a23d7f4a581c38d55e9c5ce05",
        "encoding": "UTF-8",
        "length": 8979,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.webapp.core",
        "org.nuxeo.ecm.platform.mail"
      ],
      "version": "10.10"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-mail-types",
      "artifactVersion": "10.10",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.mail.jsf",
          "org.nuxeo.ecm.platform.mail.types",
          "org.nuxeo.ecm.platform.mail.webui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail",
        "id": "grp:org.nuxeo.ecm.platform.mail",
        "name": "org.nuxeo.ecm.platform.mail",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n",
            "digest": "5c14b7245188fbe51fcebd6e4c6eff98",
            "encoding": "UTF-8",
            "length": 7955,
            "mimeType": "text/plain",
            "name": "README.md"
          },
          {
            "blobProviderId": "default",
            "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n\nTo test your setting you can use this class:\nA TestConnection class sample\n\n\tpublic class TestImapConnection {\n\n\t    public static void main(String args[]) throws Exception {\n\t\tProperties props = new Properties();\n\n\t\tprops.put(\"user\", \"email@example.com\");\n\t\tprops.put(\"password\", \"password\");\n\n\t\tprops.put(\"mail.store.protocol\", \"imap\");\n\t\tprops.put(\"mail.imap.host\", \"mail.example.com\");\n\t\tprops.put(\"mail.imap.port\", \"993\");\n\t\tprops.put(\"mail.imap.ssl.protocols\", \"SSL\");\n\t\tprops.put(\"mail.imap.starttls.enable\", \"true\");\n\n\t\tprops.put(\"mail.imap.socketFactory.class\",\n\t\t        \"javax.net.ssl.SSLSocketFactory\");\n\t\tprops.put(\"mail.imap.socketFactory.port\", \"993\");\n\t\tprops.put(\"mail.imap.socketFactory.fallback\", \"false\");\n\n\t\tSession session = Session.getDefaultInstance(props);\n\n\t\tStore store = session.getStore();\n\t\tSystem.err.println(\"connecting\");\n\t\tstore.connect(props.getProperty(\"user\").toString(), props.getProperty(\n\t\t        \"password\").toString());\n\n\t\tstore.close();\n\t\tSystem.err.println(\"done\");\n\t    }\n\n\t}\n\n",
            "digest": "217a171a23d7f4a581c38d55e9c5ce05",
            "encoding": "UTF-8",
            "length": 8979,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.platform.mail.types",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.types/org.nuxeo.ecm.platform.mail.core.types.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.types.contrib--schema",
              "id": "org.nuxeo.ecm.platform.mail.core.types.contrib--schema",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <schema name=\"mail\" prefix=\"mail\" src=\"schemas/mail.xsd\"/>\n    <schema name=\"protocol\" prefix=\"prot\" src=\"schemas/protocol.xsd\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.types/org.nuxeo.ecm.platform.mail.core.types.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.types.contrib--doctype",
              "id": "org.nuxeo.ecm.platform.mail.core.types.contrib--doctype",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Document\" name=\"MailMessage\">\n      <schema name=\"mail\"/>\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"NXTag\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"MailFolder\">\n      <schema name=\"protocol\"/>\n      <subtypes>\n        <type>MailMessage</type>\n      </subtypes>\n    </doctype>\n\n    <!-- allow mail folders within workspaces -->\n    <doctype append=\"true\" name=\"Workspace\">\n      <subtypes>\n        <type>MailFolder</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.types/org.nuxeo.ecm.platform.mail.core.types.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.types.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 437,
          "services": [],
          "startOrder": 381,
          "version": "10.10",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.types.contrib\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n\n    <schema name=\"mail\" src=\"schemas/mail.xsd\" prefix=\"mail\"/>\n    <schema name=\"protocol\" src=\"schemas/protocol.xsd\" prefix=\"prot\"/>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"MailMessage\" extends=\"Document\">\n      <schema name=\"mail\"/>\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Commentable\" />\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"NXTag\" />\n    </doctype>\n\n    <doctype name=\"MailFolder\" extends=\"Folder\">\n      <schema name=\"protocol\"/>\n      <subtypes>\n        <type>MailMessage</type>\n      </subtypes>\n    </doctype>\n\n    <!-- allow mail folders within workspaces -->\n    <doctype name=\"Workspace\" append=\"true\">\n      <subtypes>\n        <type>MailFolder</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.types/org.nuxeo.ecm.platform.mail.web.types.contrib/Contributions/org.nuxeo.ecm.platform.mail.web.types.contrib--types",
              "id": "org.nuxeo.ecm.platform.mail.web.types.contrib--types",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type id=\"MailMessage\">\n      <label>MailMessage</label>\n      <icon>/icons/mail.png</icon>\n      <bigIcon>/icons/mail_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>mailMessage</layout>\n        <layout>noLabelFiles</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>mailMessage</layout>\n        <layout>noLabelFiles</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <!-- files content already on summary page -->\n      <layouts mode=\"view\">\n        <layout>mailMessage</layout>\n      </layouts>\n    </type>\n\n    <type id=\"MailFolder\">\n      <label>MailFolder</label>\n      <icon>/icons/mail_folder.png</icon>\n      <bigIcon>/icons/mailfolder_100.png</bigIcon>\n      <category>Collaborative</category>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>mail_folder</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>mail_document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.types/org.nuxeo.ecm.platform.mail.web.types.contrib",
          "name": "org.nuxeo.ecm.platform.mail.web.types.contrib",
          "requirements": [],
          "resolutionOrder": 438,
          "services": [],
          "startOrder": 387,
          "version": "10.10",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.web.types.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n\n    <type id=\"MailMessage\">\n      <label>MailMessage</label>\n      <icon>/icons/mail.png</icon>\n      <bigIcon>/icons/mail_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>mailMessage</layout>\n        <layout>noLabelFiles</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>mailMessage</layout>\n        <layout>noLabelFiles</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <!-- files content already on summary page -->\n      <layouts mode=\"view\">\n        <layout>mailMessage</layout>\n      </layouts>\n    </type>\n\n    <type id=\"MailFolder\">\n      <label>MailFolder</label>\n      <icon>/icons/mail_folder.png</icon>\n      <bigIcon>/icons/mailfolder_100.png</bigIcon>\n      <category>Collaborative</category>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>mail_folder</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>mail_document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-ecm-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.types/org.nuxeo.ecm.platform.mail.core.lifecycle.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.lifecycle.contrib--types",
              "id": "org.nuxeo.ecm.platform.mail.core.lifecycle.contrib--types",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"MailMessage\">default</type>\n      <type name=\"MailFolder\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.types/org.nuxeo.ecm.platform.mail.core.lifecycle.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.lifecycle.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.mail.core.types.contrib",
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 439,
          "services": [],
          "startOrder": 377,
          "version": "10.10",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.mail.core.lifecycle.contrib\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <require>org.nuxeo.ecm.platform.mail.core.types.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"MailMessage\">default</type>\n      <type name=\"MailFolder\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-lifecycle-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-mail-types-10.10.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.types",
      "id": "org.nuxeo.ecm.platform.mail.types",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_191\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 10.10-t20190122-092042\r\nBundle-Name: Nuxeo ECM Mail Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.mail.types;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nRequire-Bundle: org.nuxeo.ecm.core.api,org.nuxeo.ecm.core\r\nBundle-Category: core\r\nEclipse-LazyStart: false\r\nNuxeo-Component: OSGI-INF/nxmail-core-types-contrib.xml,OSGI-INF/nxmai\r\n l-ecm-types-contrib.xml,OSGI-INF/nxmail-lifecycle-contrib.xml\r\nProvide-Package: org.nuxeo.ecm.platform.mail.types\r\n\r\n",
      "maxResolutionOrder": 439,
      "minResolutionOrder": 437,
      "packages": [
        "nuxeo-imap-connector"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n\nTo test your setting you can use this class:\nA TestConnection class sample\n\n\tpublic class TestImapConnection {\n\n\t    public static void main(String args[]) throws Exception {\n\t\tProperties props = new Properties();\n\n\t\tprops.put(\"user\", \"email@example.com\");\n\t\tprops.put(\"password\", \"password\");\n\n\t\tprops.put(\"mail.store.protocol\", \"imap\");\n\t\tprops.put(\"mail.imap.host\", \"mail.example.com\");\n\t\tprops.put(\"mail.imap.port\", \"993\");\n\t\tprops.put(\"mail.imap.ssl.protocols\", \"SSL\");\n\t\tprops.put(\"mail.imap.starttls.enable\", \"true\");\n\n\t\tprops.put(\"mail.imap.socketFactory.class\",\n\t\t        \"javax.net.ssl.SSLSocketFactory\");\n\t\tprops.put(\"mail.imap.socketFactory.port\", \"993\");\n\t\tprops.put(\"mail.imap.socketFactory.fallback\", \"false\");\n\n\t\tSession session = Session.getDefaultInstance(props);\n\n\t\tStore store = session.getStore();\n\t\tSystem.err.println(\"connecting\");\n\t\tstore.connect(props.getProperty(\"user\").toString(), props.getProperty(\n\t\t        \"password\").toString());\n\n\t\tstore.close();\n\t\tSystem.err.println(\"done\");\n\t    }\n\n\t}\n\n",
        "digest": "217a171a23d7f4a581c38d55e9c5ce05",
        "encoding": "UTF-8",
        "length": 8979,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core"
      ],
      "version": "10.10"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-mail-web-ui",
      "artifactVersion": "10.10",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.mail.jsf",
          "org.nuxeo.ecm.platform.mail.types",
          "org.nuxeo.ecm.platform.mail.webui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail",
        "id": "grp:org.nuxeo.ecm.platform.mail",
        "name": "org.nuxeo.ecm.platform.mail",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n",
            "digest": "5c14b7245188fbe51fcebd6e4c6eff98",
            "encoding": "UTF-8",
            "length": 7955,
            "mimeType": "text/plain",
            "name": "README.md"
          },
          {
            "blobProviderId": "default",
            "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n\nTo test your setting you can use this class:\nA TestConnection class sample\n\n\tpublic class TestImapConnection {\n\n\t    public static void main(String args[]) throws Exception {\n\t\tProperties props = new Properties();\n\n\t\tprops.put(\"user\", \"email@example.com\");\n\t\tprops.put(\"password\", \"password\");\n\n\t\tprops.put(\"mail.store.protocol\", \"imap\");\n\t\tprops.put(\"mail.imap.host\", \"mail.example.com\");\n\t\tprops.put(\"mail.imap.port\", \"993\");\n\t\tprops.put(\"mail.imap.ssl.protocols\", \"SSL\");\n\t\tprops.put(\"mail.imap.starttls.enable\", \"true\");\n\n\t\tprops.put(\"mail.imap.socketFactory.class\",\n\t\t        \"javax.net.ssl.SSLSocketFactory\");\n\t\tprops.put(\"mail.imap.socketFactory.port\", \"993\");\n\t\tprops.put(\"mail.imap.socketFactory.fallback\", \"false\");\n\n\t\tSession session = Session.getDefaultInstance(props);\n\n\t\tStore store = session.getStore();\n\t\tSystem.err.println(\"connecting\");\n\t\tstore.connect(props.getProperty(\"user\").toString(), props.getProperty(\n\t\t        \"password\").toString());\n\n\t\tstore.close();\n\t\tSystem.err.println(\"done\");\n\t    }\n\n\t}\n\n",
            "digest": "217a171a23d7f4a581c38d55e9c5ce05",
            "encoding": "UTF-8",
            "length": 8979,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.platform.mail.webui",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.webui/org.nuxeo.ecm.platform.mail.web.ui.resources.contrib/Contributions/org.nuxeo.ecm.platform.mail.web.ui.resources.contrib--resources",
              "id": "org.nuxeo.ecm.platform.mail.web.ui.resources.contrib--resources",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <resource name=\"nuxeo-platform-mail.html\" shrinkable=\"false\" type=\"import\">\n      <uri>/ui/nuxeo-platform-mail/nuxeo-platform-mail.html</uri>\n    </resource>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.webui/org.nuxeo.ecm.platform.mail.web.ui.resources.contrib/Contributions/org.nuxeo.ecm.platform.mail.web.ui.resources.contrib--bundles",
              "id": "org.nuxeo.ecm.platform.mail.web.ui.resources.contrib--bundles",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "10.10",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <bundle name=\"web-ui\">\n      <resources append=\"true\">\n        <resource>nuxeo-platform-mail.html</resource>\n      </resources>\n    </bundle>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.webui/org.nuxeo.ecm.platform.mail.web.ui.resources.contrib",
          "name": "org.nuxeo.ecm.platform.mail.web.ui.resources.contrib",
          "requirements": [
            "org.nuxeo.web.ui.resources"
          ],
          "resolutionOrder": 960,
          "services": [],
          "startOrder": 388,
          "version": "10.10",
          "xmlFileContent": "<?xml version=\"1.0\"?>\r\n<component name=\"org.nuxeo.ecm.platform.mail.web.ui.resources.contrib\">\r\n  <require>org.nuxeo.web.ui.resources</require>\r\n\r\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\r\n    <resource name=\"nuxeo-platform-mail.html\" type=\"import\" shrinkable=\"false\">\r\n      <uri>/ui/nuxeo-platform-mail/nuxeo-platform-mail.html</uri>\r\n    </resource>\r\n  </extension>\r\n\r\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\r\n    <bundle name=\"web-ui\">\r\n      <resources append=\"true\">\r\n        <resource>nuxeo-platform-mail.html</resource>\r\n      </resources>\r\n    </bundle>\r\n  </extension>\r\n</component>",
          "xmlFileName": "/OSGI-INF/nuxeo-platform-mail-webresources-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-mail-web-ui-10.10.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.webui",
      "id": "org.nuxeo.ecm.platform.mail.webui",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_191\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Mail Web UI\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.mail.webui;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/nuxeo-platform-mail-webresources-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 960,
      "minResolutionOrder": 960,
      "packages": [
        "nuxeo-imap-connector"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account. \n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail. \n\nFor every new mail found in a certain account, a new corresponding \n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\", \nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\t  \n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\t    \n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like : \n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n           \n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n              \n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority. \n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n\nTo test your setting you can use this class:\nA TestConnection class sample\n\n\tpublic class TestImapConnection {\n\n\t    public static void main(String args[]) throws Exception {\n\t\tProperties props = new Properties();\n\n\t\tprops.put(\"user\", \"email@example.com\");\n\t\tprops.put(\"password\", \"password\");\n\n\t\tprops.put(\"mail.store.protocol\", \"imap\");\n\t\tprops.put(\"mail.imap.host\", \"mail.example.com\");\n\t\tprops.put(\"mail.imap.port\", \"993\");\n\t\tprops.put(\"mail.imap.ssl.protocols\", \"SSL\");\n\t\tprops.put(\"mail.imap.starttls.enable\", \"true\");\n\n\t\tprops.put(\"mail.imap.socketFactory.class\",\n\t\t        \"javax.net.ssl.SSLSocketFactory\");\n\t\tprops.put(\"mail.imap.socketFactory.port\", \"993\");\n\t\tprops.put(\"mail.imap.socketFactory.fallback\", \"false\");\n\n\t\tSession session = Session.getDefaultInstance(props);\n\n\t\tStore store = session.getStore();\n\t\tSystem.err.println(\"connecting\");\n\t\tstore.connect(props.getProperty(\"user\").toString(), props.getProperty(\n\t\t        \"password\").toString());\n\n\t\tstore.close();\n\t\tSystem.err.println(\"done\");\n\t    }\n\n\t}\n\n",
        "digest": "217a171a23d7f4a581c38d55e9c5ce05",
        "encoding": "UTF-8",
        "length": 8979,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "10.10"
    }
  ],
  "creationDate": 1664793571025,
  "key": "Nuxeo Platform LTS 2019-10.10",
  "name": "Nuxeo Platform LTS 2019",
  "operations": [
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.mail.automation.chains",
      "hierarchyPath": "/op:ProcessAttachment",
      "label": "ProcessAttachment",
      "name": "ProcessAttachment",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "signature": [
        "void",
        "blob"
      ],
      "since": "",
      "url": "ProcessAttachment",
      "version": "10.10"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.mail.core.operations.contrib",
      "description": "Checks for unread emails in the inbox of an Email Folder passed as input.",
      "hierarchyPath": "/op:Mail.CheckInbox",
      "label": "Check Mail Inbox",
      "name": "Mail.CheckInbox",
      "operationClass": "org.nuxeo.ecm.platform.mail.operations.MailCheckInboxOperation",
      "params": [],
      "signature": [
        "document",
        "void"
      ],
      "since": "",
      "url": "Mail.CheckInbox",
      "version": "10.10"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.mail.automation.chains",
      "hierarchyPath": "/op:CreateMailDocumentFromAutomation",
      "label": "CreateMailDocumentFromAutomation",
      "name": "CreateMailDocumentFromAutomation",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "signature": [
        "void",
        "document"
      ],
      "since": "",
      "url": "CreateMailDocumentFromAutomation",
      "version": "10.10"
    }
  ],
  "packages": [
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.platform.mail",
        "org.nuxeo.ecm.platform.mail.jsf",
        "org.nuxeo.ecm.platform.mail.types",
        "org.nuxeo.ecm.platform.mail.webui"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-imap-connector-1.4.3",
      "id": "nuxeo-imap-connector-1.4.3",
      "name": "nuxeo-imap-connector",
      "optionalDependencies": [
        "nuxeo-jsf-ui",
        "nuxeo-web-ui"
      ],
      "packageType": "addon",
      "title": "Nuxeo IMAP Connector",
      "version": "1.4.3"
    }
  ],
  "pluginSnapshots": {},
  "releaseDate": 1547942400000,
  "version": "10.10"
}